package edu.pe.cayetano.wsusuario.bo;

import java.sql.Connection;

import ws.synopsis.frmwrk.common.BResult;
import edu.pe.cayetano.wsusuario.constantes.Constantes;
import edu.pe.cayetano.wsusuario.dao.UsuarioDAO;
import edu.pe.cayetano.wsusuario.framework.BusinessException;
import edu.pe.cayetano.wsusuario.to.WSCabeceraUsuarioTO;
import edu.pe.cayetano.wsusuario.to.WSUsuarioTO;

public class UsuarioBO extends BaseBO{

	/**
	 * Metodo para obtener los datos de un usuario dado su username
	 * */
	public BResult getUsuario(WSCabeceraUsuarioTO cabeceraTO ){
		BResult 				retSalida		= null;
		BResult 				retConn			= null;
		UsuarioDAO				usuarioDAO		= null;
		Connection				conn			= null;
		try{
			retConn		= conectar();
			if(retConn.getCode()==0 && retConn.getObject()!=null){
				conn = (Connection)retConn.getObject();
				usuarioDAO	= new UsuarioDAO(conn);
				retSalida 	= usuarioDAO.getUsuario(cabeceraTO);
				System.out.println("[WSUSuario][UsuarioBO][getUsuario]retSalida:<"+retSalida+">");
				System.out.println("[WSUSuario][UsuarioBO][getUsuario]retSalida.getObject():<"+retSalida.getObject()+">");
				// si el codigo de retorno es 0
				if(retSalida.getCode()==0){
					System.out.println("[WSUsuario][UsuarioBO][getUsuario]:codigo de respuesta ("+retSalida.getCode()+"): entrando a exito de login");
					if((Constantes.CODIGO_ERROR_USUARIO_BLOQUEADO.equalsIgnoreCase(((WSUsuarioTO)retSalida.getObject()).getEstado()))){
						System.out.println("[WSUsuario][UsuarioBO][getUsuario]:codigo de respuesta ("+retSalida.getCode()+"): usuario bloqueado!!!");
						retSalida.setMessage(Constantes.MENSAJE_CODIGO_USUARIO_BLOQUEADO);
						retSalida.setCode(Constantes.CODIGO_USUARIO_BLOQUEADO);
					}
					if((Constantes.CODIGO_ERROR_USUARIO_INACTIVO.equalsIgnoreCase(((WSUsuarioTO)retSalida.getObject()).getEstado()))){
						System.out.println("[WSUsuario][UsuarioBO][getUsuario]:codigo de respuesta ("+retSalida.getCode()+"): usuario inactivo!!!");
						retSalida.setMessage(Constantes.MENSAJE_CODIGO_USUARIO_INACTIVO);
						retSalida.setCode(Constantes.CODIGO_USUARIO_INACTIVO);
					}
				}
				if(Constantes.CODIGO_PASSWORD_INCORRECTO==retSalida.getCode()){
					System.out.println("[WSUsuario][UsuarioBO][getUsuario]:codigo de respuesta ("+retSalida.getCode()+"): entrando a password incorrecto");
					retSalida.setMessage(Constantes.MENSAJE_CODIGO_PASSWORD_INCORRECTO);
					retSalida.setCode(Constantes.CODIGO_PASSWORD_INCORRECTO);
				}
			}else{
				System.out.println("[WSUsuario][UsuarioBO][getUsuario]:conexion nula");
				retSalida = new BResult();
				retSalida.setCode(retConn.getCode());
				retSalida.setMessage(retConn.getMessage());
			}
		}catch(Exception e){
			retSalida = new BResult();
			retSalida.setCode(Constantes.CODIGO_ERROR);
			retSalida.setMessage(e.getMessage());
		}finally{
			try{
				desconectar();
			}catch(Exception e){
				retSalida = new BResult();
				retSalida.setCode(Constantes.CODIGO_ERROR);
				retSalida.setMessage("[WSUsuario][UsuarioBO][getUsuario]:error generado por:"+e.getMessage());
			}
		}
		System.out.println("[WSUSuario][UsuarioBO][getUsuario]retSalida:<"+retSalida+">");
		System.out.println("[WSUSuario][UsuarioBO][getUsuario]retSalida.getObject():<"+retSalida.getObject()+">");
		return retSalida;
	}

	/**
	 * Metodo para obtener el listado de todos los usuarios
	 * */
	public BResult getListaUsuario() throws BusinessException{
		BResult 				retSalida		= null;
		UsuarioDAO				usuarioDAO		= null;
		try{
			conectar();
			usuarioDAO	 	= new UsuarioDAO(conn);
			retSalida 	= usuarioDAO.getListaUsuario();
		}catch(Exception e){
			retSalida = new BResult();
			retSalida.setCode(-1);
			retSalida.setMessage("[WSUsuario][UsuarioBO][getListaUsuario]:error generado por:"+e.getMessage());
		}finally{
			try{
				desconectar();
			}catch(Exception e){
				retSalida = new BResult();
				retSalida.setCode(-1);
				retSalida.setMessage(e.getMessage());
				retSalida.setMessage("[WSUsuario][UsuarioBO][getListaUsuario]:error generado por:"+e.getMessage());
			}
		}
		return retSalida;
	}
	
	//WSCabeceraUsuarioTO cabeceraTO

	/**
	 * Metodo que realiza el find de usuario segun campo y criterio de busqueda
	 * */
	public BResult findUsuario(WSCabeceraUsuarioTO cabeceraTO) throws BusinessException{
		BResult 				retSalida		= null;
		UsuarioDAO				usuarioDAO		= null;
		try{
			conectar();
			usuarioDAO	 	= new UsuarioDAO(conn);
			retSalida 	= usuarioDAO.findUsuario(cabeceraTO);
		}catch(Exception e){
			retSalida = new BResult();
			retSalida.setCode(-1);
			retSalida.setMessage("[WSUsuario][UsuarioBO][findUsuario]:exception generado por:"+e.getMessage());
		}finally{
			try{
				desconectar();
			}catch(Exception e){
				retSalida = new BResult();
				retSalida.setCode(-1);
				retSalida.setMessage(e.getMessage());
				retSalida.setMessage("[WSUsuario][UsuarioBO][findUsuario]:exception en el finally generado por:"+e.getMessage());
			}
		}
		return retSalida;
	}


}
